﻿#pragma once

#include <QString>
#include <QApplication>
#include <QSharedMemory>
#include <QDir>
#include <QSerialPortInfo>
#include <QStringList>
#include <opencv2/highgui.hpp>

class CommonHelper
{
public:
	/******************************************************************************
	* 函数名: setStyle
	* 描述:  设置样式表
	* 输入:  style-样式表路径
	* 输出:
	* 返回值:
	******************************************************************************/
	static void setStyle(const QString& style);
	static void setStyle(const QString& style, QWidget* pWidget);

	/******************************************************************************
	* 函数名:CheckOnly
	* 描述:  检查软件多开
	* 输入:
	* 输出:
	* 返回值:是否多开 true-多开 false-没有多开
	******************************************************************************/
	static bool CheckOnly();

	/******************************************************************************
	* 函数名:CRC
	* 描述:  
	* 输入:
	* 输出:
	* 返回值:
	******************************************************************************/
	static quint16 CRC16(const QByteArray& buffer, quint8& high, quint8& low);

	/******************************************************************************
	* 函数名:
	* 描述:  创建多层级文件夹
	* 输入:
	* 输出:
	* 返回值:
	******************************************************************************/
	static QString CreateDir(const QString& path);
	static QStringList GetDirList(const QString& path);
	// taken from utils/fileutils.cpp. We can not use utils here since that depends app_version.h.
	static bool copyRecursively(const QString& srcFilePath,
		const QString& tgtFilePath);

	/******************************************************************************
	* 函数名:
	* 描述:  获取串口列表
	* 输入:
	* 输出:
	* 返回值:
	******************************************************************************/
	static QStringList Get2KSPortList();
	static QStringList GetPortList();

	/******************************************************************************
	* 函数名:
	* 描述:  计算Pixel Clock的校验值?
	* 输入:
	* 输出:
	* 返回值:
	******************************************************************************/
	static quint32 calculate_idt307_config(float output_clk);

	/******************************************************************************
	* 函数名:
	* 描述:  处理下发的Code
	* 输入:
	* 输出:
	* 返回值:
	******************************************************************************/
	static QStringList GetCodeList(QString strCode);
	static QStringList GetScriptList(QString strScript);

	/******************************************************************************
	* 函数名:
	* 描述:  读取csv生成转为Mat
	* 输入:
	* 输出:
	* 返回值:
	******************************************************************************/
	static bool ReadCSV(QString strFile, cv::Mat& tMat);

	/******************************************************************************
	* 描述:  填充固定的字节
	******************************************************************************/
	static QByteArray TransByte(int data, int len = 2, bool fill = false);

	static QString CurrentAppPath();

	/******************************************************************************
	* 描述:  关闭进程
	******************************************************************************/
	static void CloseProcess(QString strProName);
};


class VisFPGA2ndData;
class VisFpgaHelper
{
public:
	/******************************************************************************
	* 描述:  填充固定的字节
	******************************************************************************/
	static QByteArray DM2ndParamToByte(const VisFPGA2ndData& data);
};